const int kIdDeviceSettings = 0;
const int kIdLap = 19;
const int kIdRecord = 20;
+const int kIdEvent = 21;
// constants for message fields
// for all global IDs
const int kFieldTemperature = 13;
const int kFieldEnhancedSpeed = 73;
const int kFieldEnhancedAltitude = 78;
+// for global ID: event
+const int kFieldEvent = 0;
+const int kEnumEventTimer = 0;
+const int kFieldEventType = 1;
+const int kEnumEventTypeStart = 0;
// For developer fields as a non conflicting id
const int kFieldInvalid = 255;
static char* opt_allpoints = nullptr;
static int lap_ct = 0;
+static bool new_trkseg = false;
static
arglist_t fit_args[] = {
MYNAME, f->type, f->size, fit_data.len);
}
switch (f->type) {
+ case 0: // enum
case 1: // sint8
case 2: // uint8
if (f->size == 1) {
int32_t endlat = 0x7fffffff;
int32_t endlon = 0x7fffffff;
uint32_t starttime = 0; // ??? default ?
+ uint8_t event = 0xff;
+ uint8_t eventtype = 0xff;
char cbuf[10];
Waypoint* lappt; // WptPt in gpx
// end of case def->global_id = kIdLap
break;
+ case kIdEvent:
+ switch (f->id) {
+ case kFieldEvent:
+ if (global_opts.debug_level >= 7) {
+ debug_print(7,"%s: parsing fit data: event=%d\n", MYNAME, val);
+ }
+ event = val;
+ break;
+ case kFieldEventType:
+ if (global_opts.debug_level >= 7) {
+ debug_print(7,"%s: parsing fit data: eventtype=%d\n", MYNAME, val);
+ }
+ eventtype = val;
+ break;
+ } // switch (f->id)
+ // end of case def->global_id = kIdEvent
+ break;
default:
if (global_opts.debug_level >= 1) {
debug_print(1, "%s: unrecognized/unhandled global ID for GARMIN FIT: %d\n", MYNAME, def->global_id);
if (temperature != 0x7f) {
WAYPT_SET(waypt, temperature, temperature);
}
+ if (new_trkseg) {
+ waypt->wpt_flags.new_trkseg = 1;
+ new_trkseg = false;
+ }
track_add_wpt(fit_data.track, waypt);
break;
+ case kIdEvent: // event message
+ if (event == kEnumEventTimer && eventtype == kEnumEventTypeStart) {
+ // Start event, start new track segment. Note: We don't do this
+ // on stop events because some GPS devices seem to generate a last
+ // trackpoint after the stop event and that would erroneously get
+ // assigned to the next segment.
+ new_trkseg = true;
+ }
+ break;
}
}
<time>2012-04-12T12:56:05Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="48.187666381" lon="11.854188457">
<ele>517.200</ele>
<time>2012-04-12T12:56:31Z</time>
<time>2012-04-12T13:15:45Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="48.186057223" lon="11.822205210">
<ele>542.000</ele>
<time>2012-04-12T13:15:48Z</time>
<time>2012-04-12T13:16:51Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="48.186576817" lon="11.821112377">
<ele>544.000</ele>
<time>2012-04-12T13:17:16Z</time>
<time>2012-04-12T13:26:29Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="48.174140671" lon="11.811101954">
<ele>526.400</ele>
<time>2012-04-12T13:26:45Z</time>
<time>2012-04-12T13:26:57Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="48.173926598" lon="11.811192227">
<ele>526.400</ele>
<time>2012-04-12T13:27:38Z</time>
<time>2012-04-12T13:29:06Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="48.171076583" lon="11.816465199">
<ele>528.400</ele>
<time>2012-04-12T13:29:17Z</time>
<time>2012-04-12T13:29:21Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="48.171064345" lon="11.816544240">
<ele>528.400</ele>
<time>2012-04-12T13:29:26Z</time>
<time>2013-06-13T03:56:36Z</time>
<speed>0.376000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="52.403139059" lon="13.419341572">
<time>2013-06-13T03:56:40Z</time>
<speed>1.953000</speed>
<time>2013-06-13T04:03:00Z</time>
<speed>0.091000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="52.414478684" lon="13.401474540">
<time>2013-06-13T04:03:20Z</time>
<speed>3.568000</speed>
<time>2013-06-13T04:03:34Z</time>
<speed>0.123000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="52.414743552" lon="13.401259963">
<time>2013-06-13T04:04:05Z</time>
<speed>2.382000</speed>
<time>2013-06-13T04:05:38Z</time>
<speed>0.164000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="52.412753772" lon="13.392770772">
<time>2013-06-13T04:06:06Z</time>
<speed>3.186000</speed>
<time>2013-06-13T04:07:52Z</time>
<speed>0.177000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="52.411193397" lon="13.382592794">
<time>2013-06-13T04:09:23Z</time>
<speed>2.474000</speed>
<time>2013-06-13T04:13:00Z</time>
<speed>0.079000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="52.412378598" lon="13.362509922">
<time>2013-06-13T04:13:22Z</time>
<speed>3.287000</speed>
<time>2018-03-20T07:13:58Z</time>
<speed>1.151000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="51.705748370" lon="8.721013353">
<ele>116.400</ele>
<time>2018-03-20T07:14:11Z</time>
<time>2018-03-20T07:14:16Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="51.705778126" lon="8.721019555">
<ele>117.000</ele>
<time>2018-03-20T07:14:19Z</time>
<time>2018-03-20T07:27:13Z</time>
<speed>0.000000</speed>
</trkpt>
+ </trkseg>
+ <trkseg>
<trkpt lat="51.704860056" lon="8.755921632">
<ele>168.200</ele>
<time>2018-03-20T07:27:26Z</time>